import time

from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.remote.webelement import WebElement
from selenium.webdriver.support.wait import WebDriverWait

from day07_02.base.get_logger import get_logger
from day07_02.base.get_logger_ok import GetLogger
from day07_02.tool.get_log import get_logging

# log = get_logging()

# 没有使用单例
# log = get_logger()

# 使用单例
log = GetLogger().get_logger()

class Base:

    # 初始化方法
    def __init__(self, driver: WebDriver):
        log.info("初始化driver{}".format(driver))
        self.driver = driver

    # 查找元素方法（提供：点击、输入、获取文本）使用
    def base_find_element(self, loc, timeout=30, poll=0.5) -> WebElement:
        log.info("正在查找元素: {}".format(loc))
        return WebDriverWait(self.driver, timeout=timeout, poll_frequency=poll).until(lambda x: x.find_element(*loc))

    # 点击方法
    def base_click(self, loc):
        log.info("正在点击元素: {}".format(loc))
        self.base_find_element(loc).click()

    # 输入方法
    def base_input(self, loc, value):
        log.info("正在给元素{} 输入内容: {}".format(loc, value))
        el = self.base_find_element(loc)
        # 清空
        el.clear()
        log.info("正在给元素：{} 清空".format(loc))
        # 输入
        el.send_keys(value)
        log.info("正在给元素：{} 输入内容".format(value))

    # 获取文本方法
    def base_get_text(self, loc) -> str:
        # 注意：一定要返回元素文本信息
        log.info("正在获取元素：{} 文本".format(loc))
        return self.base_find_element(loc).text

    # 截图方法
    def base_get_image(self):
        self.driver.get_screenshot_as_file("../image/fail.png")

    # 封装判断元素是否存在
    def base_if_exist(self, loc):
        try:
            self.base_find_element(loc, timeout=2)
            log.info("判断元素：{} 存在!")
            # 找到元素 assertTrue
            return True
        except:
            # 没找到元素
            log.info("判断元素：{} 不存在".format(loc))
            return False

    # 获取value属性方法封装
    def base_get_value(self, loc):
        # 使用get_attribute()方法获取指定的元素属性值
        # 注意：返回
        return self.base_find_element(loc).get_attribute("value")
